{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Simple Forward Simulation of Burgers Equation with phiflow\n",
    "\n",
    "This chapter will give an introduction for how to run _forward_, i.e., regular simulations starting with a given initial state and approximating a later state numerically, and introduce the Φ<sub>Flow</sub> framework (in the following \"phiflow\"). Phiflow provides a set of differentiable building blocks that directly interface with deep learning frameworks, and hence is a very good basis for the topics of this book. Before going for deeper and more complicated integrations, this notebook (and the next one), will show how regular simulations can be done with phiflow. Later on, we'll show that these simulations can be easily coupled with neural networks.\n",
    "\n",
    "The main repository for phiflow is [https://github.com/tum-pbs/PhiFlow](https://github.com/tum-pbs/PhiFlow), and additional API documentation and examples can be found at [https://tum-pbs.github.io/PhiFlow/](https://tum-pbs.github.io/PhiFlow/).\n",
    "\n",
    "For this jupyter notebook (and all following ones), you can find a _\"[run in colab]\"_ link at the end of the first paragraph (alternatively you can use the launch button at the top of the page). This will load the latest version from the PBDL github repo in a colab notebook that you can execute on the spot: \n",
    "[[run in colab]](https://colab.research.google.com/github/tum-pbs/pbdl-book/blob/main/overview-burgers-forw.ipynb)\n",
    "\n",
    "## Model\n",
    "\n",
    "As physical model we'll use Burgers equation.\n",
    "This equation is a very simple, yet non-linear and non-trivial, model equation that can lead to interesting shock formations. Hence, it's a very good starting point for experiments, and it's 1D version (from equation {eq}`model-burgers1d`) is given by:\n",
    "\n",
    "$$\n",
    "    \\frac{\\partial u}{\\partial{t}} + u \\nabla u =\n",
    "    \\nu \\nabla\\cdot \\nabla u\n",
    "$$ \n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Importing and loading phiflow\n",
    "\n",
    "Let's get some preliminaries out of the way: first we'll import the phiflow library, more specifically the `numpy` operators for fluid flow simulations: `phi.flow` (differentiable versions for a DL framework _X_ are loaded via `phi.X.flow` instead). This allows it to easily switch between different APIs, e.g., phiflow solvers can run in either PyTorch, Tensorflow or also JAX.\n",
    "\n",
    "**Note:** Below, the first command with a \"!\" prefix will install the [phiflow python package from GitHub](https://github.com/tum-pbs/PhiFlow) via `pip` in your python environment once you uncomment it. We've assumed that phiflow isn't installed, but if you have already done so, just comment out the first line (the same will hold for all following notebooks)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using phiflow version: 3.2.0\n"
     ]
    }
   ],
   "source": [
    "!pip install --upgrade --quiet phiflow==3.2\n",
    "from phi.flow import *\n",
    "print(\"Using phiflow version: {}\".format(phi.__version__))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next we can define and initialize the necessary constants (denoted by upper-case names):\n",
    "our simulation domain will have `N=128` cells as discretization points for the 1D velocity $u$ in a periodic domain $\\Omega$ for the interval $[-1,1]$. We'll use 32 time `STEPS` for a time interval of 1, giving us `DT=1/32`. Additionally, we'll use a viscosity `NU` of $\\nu=0.01/\\pi$.\n",
    "\n",
    "We'll also define an initial state given by $-\\text{sin}(\\pi x)$ in the numpy array `INITIAL_NUMPY`, which we'll use to initialize the velocity $u$ in the simulation in the next cell. This initialization will produce a nice shock in the center of our domain. \n",
    "\n",
    "Phiflow is object-oriented and centered around field data in the form of grids (internally represented by a tensor object). I.e. you assemble your simulation by constructing a number of grids, and updating them over the course of time steps. \n",
    "\n",
    "Phiflow internally works with tensors that have named dimensions. This will be especially handy later on for 2D simulations with additional batch and channel dimensions, but for now we'll simply convert the 1D array into a phiflow tensor that has a single spatial dimension `'x'`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "N = 128\n",
    "DX = 2./N\n",
    "STEPS = 32\n",
    "DT = 1./STEPS\n",
    "NU = 0.01/(N*np.pi)\n",
    "\n",
    "# initialization of velocities, cell centers of a CenteredGrid have DX/2 offsets for linspace()\n",
    "INITIAL_NUMPY = np.asarray( [-np.sin(np.pi * x) for x in np.linspace(-1+DX/2,1-DX/2,N)] ) # 1D numpy array\n",
    "\n",
    "INITIAL = math.tensor(INITIAL_NUMPY, spatial('x') ) # convert to phiflow tensor\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "Next, we initialize a 1D `velocity` grid from the `INITIAL` numpy array that was converted into a tensor.\n",
    "The extent of our domain $\\Omega$ is specifiied via the `bounds` parameter $[-1,1]$, and the grid uses periodic boundary conditions (`extrapolation.PERIODIC`). These two properties are the main difference between phiflow's tensor and grid objects: the latter has boundary conditions and a physical extent.\n",
    "\n",
    "Just to illustrate, we'll also print some info about the velocity object: it's a `phi.math` tensor with a size of 128. Note that the actual grid content is contained in the `values` of the grid. Below we're printing five entries by using the `numpy()` function to convert the content of the phiflow tensor into a numpy array. For tensors with more dimensions, we'd need to specify the additional dimenions here, e.g., `'y,x,vector'` for a 2D velocity field. (For tensors with a single dimensions we could leave it out.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Velocity tensor shape: (xˢ=128)\n",
      "Velocity tensor type: <class 'phi.math._tensors.CollapsedTensor'>\n",
      "Velocity tensor entries 10 to 14: [0.49289819 0.53499762 0.57580819 0.61523159 0.65317284]\n"
     ]
    }
   ],
   "source": [
    "velocity = CenteredGrid(INITIAL, extrapolation.PERIODIC, x=N, bounds=Box(x=(-1,1)))\n",
    "vt = advect.semi_lagrangian(velocity, velocity, DT)\n",
    "#velocity = CenteredGrid(lambda x: -math.sin(np.pi * x), extrapolation.PERIODIC, x=N, bounds=Box(x=(-1,1)))\n",
    "#velocity = CenteredGrid(Noise(), extrapolation.PERIODIC, x=N, bounds=Box(x=(-1,1))) # random init\n",
    "\n",
    "print(\"Velocity tensor shape: \"   + format( velocity.shape )) # == velocity.values.shape\n",
    "print(\"Velocity tensor type: \"    + format( type(velocity.values) ))\n",
    "print(\"Velocity tensor entries 10 to 14: \" + format( velocity.values.numpy('x')[10:15] ))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Running the simulation\n",
    "\n",
    "Now we're ready to run the simulation itself. To compute the diffusion and advection components of our model equation we can simply call the existing `diffusion` and `semi_lagrangian` operators in phiflow: `diffuse.explicit(u,...)` computes an explicit diffusion step via central differences for the term $\\nu \\nabla\\cdot \\nabla u$ of our model. Next, `advect.semi_lagrangian(f,u)` is used for a stable first-order approximation of the transport of an arbitrary field `f` by a velocity `u`. In our model we have $\\partial u / \\partial{t} + u \\nabla f$, hence we use the `semi_lagrangian` function to transport the velocity with itself in the implementation:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "New velocity content at t=1.0: [[0.0057228 ]\n",
      " [0.01716715]\n",
      " [0.02861034]\n",
      " [0.040052  ]\n",
      " [0.05149214]]\n"
     ]
    }
   ],
   "source": [
    "velocities = [velocity]\n",
    "age = 0.\n",
    "for i in range(STEPS):\n",
    "    v1 = diffuse.explicit(velocities[-1], NU, DT)\n",
    "    v2 = advect.semi_lagrangian(v1, v1, DT)\n",
    "    age += DT\n",
    "    velocities.append(v2)\n",
    "\n",
    "print(\"New velocity content at t={}: {}\".format( age, velocities[-1].values.numpy('x,vector')[0:5] ))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we're actually collecting all time steps in the list `velocities`. This is not necessary in general (and could consume lots of memory for long-running sims), but useful here to plot the evolution of the velocity states later on.\n",
    "\n",
    "The print statements print a few of the velocity entries, and already show that something is happening in our simulation, but it's difficult to get an intuition for the behavior of the PDE just from these numbers. Hence, let's visualize the states over time to show what is happening.\n",
    "\n",
    "## Visualization\n",
    "\n",
    "We can visualize this 1D case easily in a graph: the following code shows the initial state in blue, and then times $10/32, 20/32, 1$ in green, cyan and purple. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f9fd19fd940>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# get \"velocity.values\" from each phiflow state with a channel dimensions, i.e. \"vector\"\n",
    "vels = [v.values.numpy('x,vector') for v in velocities] # gives a list of 2D arrays \n",
    "\n",
    "import pylab\n",
    "\n",
    "fig = pylab.figure().gca()\n",
    "fig.plot(np.linspace(-1,1,len(vels[ 0].flatten())), vels[ 0].flatten(), lw=2, color='blue',  label=\"t=0\")\n",
    "fig.plot(np.linspace(-1,1,len(vels[10].flatten())), vels[10].flatten(), lw=2, color='green', label=\"t=0.3125\")\n",
    "fig.plot(np.linspace(-1,1,len(vels[20].flatten())), vels[20].flatten(), lw=2, color='cyan',  label=\"t=0.625\")\n",
    "fig.plot(np.linspace(-1,1,len(vels[32].flatten())), vels[32].flatten(), lw=2, color='purple',label=\"t=1\")\n",
    "pylab.xlabel('x'); pylab.ylabel('u'); pylab.legend()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This nicely shows the shock developing in the center of our domain, which forms from the collision of the two initial velocity \"bumps\", the positive one on left (moving right) and the negative one right of the center (moving left).\n",
    "\n",
    "As these lines can overlap quite a bit we'll also use a different visualization in the following chapters that shows the evolution over the course of all time steps in a 2D image. Our 1D domain will be shown along the Y-axis, and each point along X will represent one time step.\n",
    "\n",
    "The code below converts our collection of velocity states into a 2D array, repeating individual time steps 8 times to make the image a bit wider. This is purely optional, of course, but makes it easier to see what's happening in our Burgers simulation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1152x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def show_state(a, title):\n",
    "    # we only have 33 time steps, blow up by a factor of 2^4 to make it easier to see\n",
    "    # (could also be done with more evaluations of network)\n",
    "    a=np.expand_dims(a, axis=2)\n",
    "    for i in range(4):\n",
    "        a = np.concatenate( [a,a] , axis=2)\n",
    "\n",
    "    a = np.reshape( a, [a.shape[0],a.shape[1]*a.shape[2]] )\n",
    "    #print(\"Resulting image size\" +format(a.shape))\n",
    "\n",
    "    fig, axes = pylab.subplots(1, 1, figsize=(16, 5))\n",
    "    im = axes.imshow(a, origin='upper', cmap='inferno')\n",
    "    pylab.colorbar(im) ; pylab.xlabel('time'); pylab.ylabel('x'); pylab.title(title)\n",
    "        \n",
    "vels_img = np.asarray( np.concatenate(vels, axis=-1), dtype=np.float32 ) \n",
    "\n",
    "# save for comparison with reconstructions later on\n",
    "import os; os.makedirs(\"./temp\",exist_ok=True)\n",
    "np.savez_compressed(\"./temp/burgers-groundtruth-solution.npz\", np.reshape(vels_img,[N,STEPS+1])) # remove batch & channel dimension\n",
    "\n",
    "show_state(vels_img, \"Velocity\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This concludes a first simulation in phiflow. It's not overly complex, but because of that it's a good starting point for evaluating and comparing different physics-based deep learning approaches in the next chapter. But before that, we'll target a more complex simulation type in the next section."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Next steps\n",
    "\n",
    "Some things to try based on this simulation setup:\n",
    "\n",
    "- Feel free to experiment - the setup above is very simple, you can change the simulation parameters, or the initialization. E.g., you can use a noise field via `Noise()` to get more chaotic results (cf. the comment in the `velocity` cell above).\n",
    "\n",
    "- A bit more complicated: extend the simulation to 2D (or higher). This will require changes throughout, but all operators above support higher dimensions. Before trying this, you probably will want to check out the next example, which covers a 2D Navier-Stokes case."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
